/*
 * Copyright (c) 2022  by Junzhao
 * THIS FILE IS PART OF JAVASE Song Huongkang PROJECT
 * All Rights Reserved.
 */

package 学习.下.static关键字;
/**
 * @description static关键字
 *      有时不必要有多少对象特定的属性只有一份 例如美国人中国人的国籍就是 中国 没必要生命每个中国人的时候都附一遍
 *      static:静态的 修饰、调用 属性、方法、内部类、代码块
 *      修饰属性 ：静态变量（类变量）
 *              属性分为静态属性和非静态属性
 *              静态属性 我们创建了累的多个对象每个对象当通过某一个对象修改静态变量时会修改所有其他对象的此静态变量（直接用类名调用修改即可）
 *              非静态属性（又叫实例变量）我们创建了累的多个对象每个对象独立拥有一套类的实例变量，
 *                      修改其中一个对象的非静态属性时不会改其他对象的实例变量
 *               静 态 变 量 随 着 类 的 加 载 而 加 载 早 于 对 象 创 建
 *               类只加载一次 静态变量只会存在一份 在 方 法 区 静 态 域 中
 *
 *        调用       类变量      实例变量
 *             类    yes         no
 *             对象   yes        yes
 *
 *      修饰方法 ：叫做静态方法 只 可 以 调 用 静 态 方 法 和 属 性    非静态都可以调用
 *              随类加载而加载"类.方法名"调用
 *
 *        调用        类变量      实例变量
 *  *             类    yes         no
 *  *             对象   yes        yes
 *
 *  注意 静态方法内 this、super不可用
 *      都从生命周期的角度考虑
 *      是否使用要看经验了！ 一般工具类的属性要用静态
 *
 * @author 俊昭
 * @date 2022/3/31
*/
public class StaticTest {
    public static void main(String[] args) {
        Chinese c1 =new Chinese();
        c1.age = 18;
        c1.name = "小张";

        Chinese c2 =new Chinese();
        c2.age = 20;
        c2.name = "小王";

        c1.nation="China";// 未对c2赋值 但
        System.out.println(c2.nation);// 是c1的nation赋的值
        Chinese.nation ="CHN";
        System.out.println(c2.nation);

        Chinese.show();
        double a=Math.PI;
    }
}
class Chinese{
    String name;
    int age;

    // 静态的属性
    static String nation;

    public static void show(){
        System.out.println("是中国人"+nation);

    }
}
